#include "SQLCheck.h"
#include "../../visitor/SQLASTVisitor.h"

SQLCheck::SQLCheck()
{
}

// SQLCheck(SQLExpr_ptr expr) {
//     this->setExpr(expr);
// }

SQLExpr_ptr SQLCheck::getExpr()
{
  return expr;
}

void SQLCheck::setExpr(SQLExpr_ptr x)
{
  if (x != NULL)
  {
    x->setParent(SharedObject(SQLCheck));
  }
  this->expr = x;
}

void SQLCheck::accept0(SQLASTVisitor_ptr visitor)
{
  if (visitor->visit(SharedObject(SQLCheck)))
  {
    if (SQLConstraintImpl::getName() != NULL)
    {
      SQLConstraintImpl::getName()->accept(visitor);
    }

    if (expr != NULL)
    {
      expr->accept(visitor);
    }
  }
  visitor->endVisit(SharedObject(SQLCheck));
}

void SQLCheck::cloneTo(SQLCheck_ptr x)
{
  SQLConstraintImpl::cloneTo(std::dynamic_pointer_cast<SQLConstraintImpl>(x));

  if (expr != nullptr)
  {
    x->expr = std::dynamic_pointer_cast<SQLExpr>(expr->clone());
  }

  x->enforced = enforced;
}

// BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target) {
//     if (this->expr == expr) {
//         setExpr(target);
//         return BOOL::TRUE;
//     }

//     if (getName() == expr) {
//         setName((SQLName) target);
//         return BOOL::TRUE;
//     }

//     if (getComment() == expr) {
//         setComment(target);
//         return BOOL::TRUE;
//     }
//     return BOOL::FALSE;
// }

BOOL_ptr SQLCheck::getEnforced()
{
  return enforced;
}

void SQLCheck::setEnforced(BOOL_ptr enforced)
{
  this->enforced = enforced;
}
